This invention relates generally to the field of computer systems. More particularly, a system and method are provided for operating a control unit, in a real-time collaboration server, to share content from one collaboration client with other clients.
Real-time collaboration systems are useful for sharing information among multiple collaborators or participants, without requiring them to be physically colocated. However, existing systems have notable deficiencies. For example, existing systems cannot readily accommodate large numbers of users (e.g., hundreds, thousands) while providing acceptable performance. Instead, as more and more users join a collaboration system, the response time (or other measure of performance) degrades rapidly until the system becomes unusable or barely usable.
With some systems, the inclusion of just one slow user in a collaboration can bog down an entire system. This may be because the system enforces synchronous operations, in which each collaboration task must be completed before the next can be initiated. Or, a system may manage collaboration communications very poorly. For example, a system may be able to store only a limited amount of data to be disseminated to collaboration participants. When this maximum is reached, the system may be unable to accept and disseminate new data until the slow user finishes using the oldest data. Or, if the system can store an unlimited (or virtually unlimited) amount of data for dissemination, performance may suffer as the amount of data that are stored increases.
Other collaboration systems require the processes or logic modules that manage a collaboration to also handle communication with individual users. As the number of users grows, the burden of handling each user's communications as well as the collaboration logic becomes onerous.
Still other collaboration systems support only limited collaboration modes (e.g., application sharing, document sharing), and/or attempt to manage all modes with a single process. As a result, a mode that is not particularly busy may be detrimentally affected by the activity of another mode.
An application sharing mode of collaboration may entail the replication of content displayed on one user's computer upon other users' computers. One method of replicating content requires the interception of drawing and display commands executed on the first user's computer. Those commands are then replayed on the other users' computers. This method is generally limited to computer systems executing an operating system that supports such interception. In other environments, an intercepted command may not be supported or understood by the receiving user's computer.
Another method of replicating a computer screen involves capturing the first user's entire screen and sending it to the other users whenever it changes. For example, the values of every pixel in the screen may be transmitted. This method is often very slow, and may require a substantial amount of communication and processing for a small change (e.g., a cursor movement).
It may be difficult to add a new participant to an ongoing collaboration in an existing system. For example, the new participant may only be provided the collaboration data that are generated after he or she joins. These data may be meaningless without the context or status of the collaboration (e.g., the appearance of a shared document) at the time the new participant joined. Or, if the system attempts to copy the entire status of the collaboration every time a new participant joins, system performance may suffer.
Further, in existing collaboration systems a new participant's client often must be rebooted in order to configure it for a collaboration. This is typically due to the manner in which updates to the client video display are captured for use in the collaboration. Inefficient methods of enabling video updates to be captured may also be unstable, depending on how they perform the capture, or may be deactivated if a device driver is loaded or reloaded. Further, some methods only work for specific operating systems or specific versions of an operating system.